# Introduction #

Нашёл краткое описание способов защиты :

```
Для защиты от всего вышесказанного достаточно придерживаться нескольких простых правил.

1) для целых и дробных величин, перед их использованием в запросе достаточно привести величину к нужному типу.

$id=(int)$id; $total=(float)$total;

Вместо этого можно вставить систему слежения за тестированием на SQL инъекцию.

if((string)$id<>(string)(int)$id) {

//пишем в лог о попытке

die('ops');

}

2) для строковых параметров, которые не используются в like, regexp и тд, экранируем кавычки.

$str=addslashes($str);

или, лучше,

mysql_escape_string($str)

3) в строках, которые предполагается использовать внутри like, regexp и тд, необходимо так же заэкранировать
специальные символы, применяющиеся в этих операторах, если это необходимо. В противном случае, можно закомментировать
использование этих символов.
```

Источник : http://www.securitylab.ru/contest/212083.php

Дополнительное чтиво : http://www.phpfaq.ru/safety

# Система защиты #

Система защиты включается в ответ на попытку SQL-инъекции, ручной модификации параметров, либо отправки подложных данных.

Результат всех таких действий : запись лога попытки взлома в таблицу Ошибок и отгрузка игрока, который пытался это сделать.<br>
А потом админ сидит и проверяет кто у нас там такой умный =)<br>
<br>
<h1>Возможные пути проникновения</h1>

Естественно путь проникновения в программу может быть только один : путём отправки параметров GET и POST. Игра сделана так, что через элементы интерфейса нельзя передать ложные данные. Однако злоумышленник может вручную отправлять нужные ему GET/POST запросы со всякой гадостью.<br>
Игра разбита на страницы. Поэтому задачей системы безопасности является проверка всех параметров GET и POST, передаваемых загруженной странице.<br>
<br>
<h2>Номер публичной сессии</h2>

На всех страницах есть GET-параметр <code>session</code> (напр. "ea9800b41a2b"), который управляет механизмом идентификации пользователя.<br>
<br>
Защита: строка 12 символов, только символы a-f и цифры 0-9.<br>
<br>
regexp:<br>
<pre><code>$text = "ea9800b41a2b";<br>
echo preg_match ( '/[0-9a-f]{12}/', $text );<br>
</code></pre>

<h2>Кукисы</h2>

<h2>Обзор</h2>

GET: 2 параметра: <code>cp</code> и <code>lgn</code>.<br>
cp : задает номер текущей планеты<br>
lgn : обновляет активность в Обзоре при логине на главную планету, можно принудительно вписать его в строку браузере (lgn=1) и получать актив в Обзоре. Без этого параметра активность планеты не изменяется.<br>
<br>
POST: параметры не передаются